Micron Document
NexusPi Git Node


Displaying Raw • Download

lib/microReticulum/src/Packet.cpp copilot/add-rtnode-configuration-options (9529fa8a) Text, 33.95 KB

Tff7b72#Tff7b72include T8b949e"Packet.h"

Tff7b72#Tff7b72include T8b949e"Reticulum.h"
Tff7b72#Tff7b72include T8b949e"Transport.h"
Tff7b72#Tff7b72include T8b949e"Identity.h"
Tff7b72#Tff7b72include T8b949e"Log.h"
Tff7b72#Tff7b72include T8b949e"Utilities/OS.h"

Tff7b72#Tff7b72include T8b949e<string.h>
Tff7b72#Tff7b72include T8b949e<stdexcept>

Tff7b72using Tff7b72namespace T7ee787RNSTb4b4b4;
Tff7b72using Tff7b72namespace T7ee787RNSTff7b72:Tff7b72:T7ee787TypeTff7b72:Tff7b72:T7ee787PacketReceiptTb4b4b4;
Tff7b72using Tff7b72namespace T7ee787RNSTff7b72:Tff7b72:T7ee787TypeTff7b72:Tff7b72:T7ee787PacketTb4b4b4;
Tff7b72using Tff7b72namespace T7ee787RNSTff7b72:Tff7b72:T7ee787UtilitiesTb4b4b4;

Te6edf3ProofDestinationTff7b72:Tff7b72:Te6edf3ProofDestinationTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3packetTb4b4b4) Tff7b72: Te6edf3DestinationTb4b4b4(Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3OUTTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3SINGLETb4b4b4, Te6edf3packetTb4b4b4.Te6edf3get_hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3leftTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3TRUNCATED_HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4)
Tb4b4b4{
Tb4b4b4}

Te6edf3PacketTff7b72:Tff7b72:Te6edf3PacketTb4b4b4(Tff7b72const Te6edf3DestinationTff7b72& Te6edf3destinationTb4b4b4, Tff7b72const Te6edf3InterfaceTff7b72& Te6edf3attached_interfaceTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Te6edf3types Te6edf3packet_type T8b949e/*= DATA*/Tb4b4b4, Te6edf3context_types Te6edf3context T8b949e/*= CONTEXT_NONE*/Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3types Te6edf3transport_type T8b949e/*= Type::Transport::BROADCAST*/Tb4b4b4, Te6edf3header_types Te6edf3header_type T8b949e/*= HEADER_1*/Tb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3transport_id T8b949e/*= {Bytes::NONE}*/Tb4b4b4, Tffa657bool Te6edf3create_receipt T8b949e/*= true*/Tb4b4b4, Te6edf3context_flags Te6edf3context_flag T8b949e/*= FLAG_UNSET*/Tb4b4b4) Tff7b72:
Te6edf3_objectTb4b4b4(Tff7b72new Te6edf3ObjectTb4b4b4(Te6edf3destinationTb4b4b4, Te6edf3attached_interfaceTb4b4b4)Tb4b4b4)
Tb4b4b4{

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffCreating packet with destination...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// CBA Should never see empty transport_type
T8b949e//if (transport_type == NONE) {
T8b949e// transport_type = Type::Transport::BROADCAST;
T8b949e//}
T8b949e// following moved to object constructor to avoid extra NONE object
T8b949e//_destination = destination;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72= Te6edf3header_typeTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72= Te6edf3packet_typeTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_type Tff7b72= Te6edf3transport_typeTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72= Te6edf3contextTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context_flag Tff7b72= Te6edf3context_flagTb4b4b4;

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_id Tff7b72= Te6edf3transport_idTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_data Tff7b72= Te6edf3dataTb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3MDUTb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_truncated Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3resizeTb4b4b4(Te6edf3MDUTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flags Tff7b72= Te6edf3get_packed_flagsTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_create_receipt Tff7b72= Te6edf3create_receiptTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffCreating packet without destination...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// CBA NOTE: This variant is for creating a new packet from a received raw buffer
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_raw Tff7b72= Te6edf3dataTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packed Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_fromPacked Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_create_receipt Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}

Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffPacket object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Tff7b72thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}

T8b949e// CBA LINK
Te6edf3PacketTff7b72:Tff7b72:Te6edf3PacketTb4b4b4(Tff7b72const Te6edf3LinkTff7b72& Te6edf3linkTb4b4b4, Tff7b72const Te6edf3BytesTff7b72& Te6edf3dataTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3PacketTff7b72:Tff7b72:Te6edf3types Te6edf3packet_type T8b949e/*= Type::Packet::DATA*/Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3PacketTff7b72:Tff7b72:Te6edf3context_types Te6edf3context T8b949e/*= Type::Packet::CONTEXT_NONE*/Tb4b4b4, Te6edf3context_flags Te6edf3context_flag T8b949e/*= FLAG_UNSET*/Tb4b4b4) Tff7b72:
T8b949e//_object(new Object(link))
T8b949e//Packet(link.destination(), data, packet_type, context, Type::Transport::BROADCAST, Type::Packet::HEADER_1, {Bytes::NONE}, true, context_flag)
T8b949e// CBA Must use a destination that targets the Link itself instead of the original destination used to create the link
Te6edf3PacketTb4b4b4(Te6edf3DestinationTb4b4b4(Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3OUTTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINKTb4b4b4, Te6edf3linkTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4, Te6edf3dataTb4b4b4, Te6edf3packet_typeTb4b4b4, Te6edf3contextTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3BROADCASTTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3PacketTff7b72:Tff7b72:Te6edf3HEADER_1Tb4b4b4, Tb4b4b4{Te6edf3BytesTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4, Tffa657trueTb4b4b4, Te6edf3context_flagTb4b4b4)
Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffCreating packet with link...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_link Tff7b72= Te6edf3linkTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_MTU Tff7b72= Te6edf3linkTb4b4b4.Te6edf3mtuTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// CBA HACK: Need to re-build packed flags since Link was assigned
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flags Tff7b72= Te6edf3get_packed_flagsTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3MEMTb4b4b4(Ta5d6ff"Ta5d6ffPacket link object created, this: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Tff7b72thisTb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff, data: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Tb4b4b4(Tffa657uintptr_tTb4b4b4)Te6edf3_objectTb4b4b4.Te6edf3getTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}


Tffa657uint8_t Te6edf3PacketTff7b72:Tff7b72:Te6edf3get_packed_flagsTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tffa657uint8_t Te6edf3packed_flags Tff7b72= T79c0ff0Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3LRPROOFTb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ff***** Packing with LINK typeTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3packed_flags Tff7b72= Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72<Tff7b72< T79c0ff6Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context_flag Tff7b72<Tff7b72< T79c0ff5Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_type Tff7b72<Tff7b72< T79c0ff4Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINK Tff7b72<Tff7b72< T79c0ff2Tb4b4b4) Tff7b72| Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_typeTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3logic_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket destination is requiredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ff***** Packing with %d typeTa5d6ff"Tb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3packed_flags Tff7b72= Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72<Tff7b72< T79c0ff6Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context_flag Tff7b72<Tff7b72< T79c0ff5Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_type Tff7b72<Tff7b72< T79c0ff4Tb4b4b4) Tff7b72| Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4) Tff7b72<Tff7b72< T79c0ff2Tb4b4b4) Tff7b72| Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_typeTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3packed_flagsTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3PacketTff7b72:Tff7b72:Te6edf3unpack_flagsTb4b4b4(Tffa657uint8_t Te6edf3flagsTb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72= Tff7b72static_castTff7b72<Te6edf3header_typesTff7b72>Tb4b4b4(Tb4b4b4(Te6edf3flags Tff7b72& T79c0ff0b01000000Tb4b4b4) Tff7b72>Tff7b72> T79c0ff6Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context_flag Tff7b72= Tff7b72static_castTff7b72<Te6edf3TypeTff7b72:Tff7b72:Te6edf3PacketTff7b72:Tff7b72:Te6edf3context_flagsTff7b72>Tb4b4b4(Tb4b4b4(Te6edf3flags Tff7b72& T79c0ff0b00100000Tb4b4b4) Tff7b72>Tff7b72> T79c0ff5Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_type Tff7b72= Tff7b72static_castTff7b72<Te6edf3TypeTff7b72:Tff7b72:Te6edf3TransportTff7b72:Tff7b72:Te6edf3typesTff7b72>Tb4b4b4(Tb4b4b4(Te6edf3flags Tff7b72& T79c0ff0b00010000Tb4b4b4) Tff7b72>Tff7b72> T79c0ff4Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_type Tff7b72= Tff7b72static_castTff7b72<Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3typesTff7b72>Tb4b4b4(Tb4b4b4(Te6edf3flags Tff7b72& T79c0ff0b00001100Tb4b4b4) Tff7b72>Tff7b72> T79c0ff2Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72= Tff7b72static_castTff7b72<Te6edf3typesTff7b72>Tb4b4b4(Te6edf3flags Tff7b72& T79c0ff0b00000011Tb4b4b4)Tb4b4b4;
Tb4b4b4}


T8b949e/*
== Reticulum Wire Format ======

A Reticulum packet is composed of the following fields:

[HEADER 2 bytes] [ADDRESSES 16/32 bytes] [CONTEXT 1 byte] [DATA 0-465 bytes]

* The HEADER field is 2 bytes long.
* Byte 1: [IFAC Flag], [Header Type], [Propagation Type], [Destination Type] and [Packet Type]
* Byte 2: Number of hops

* Interface Access Code field if the IFAC flag was set.
* The length of the Interface Access Code can vary from
1 to 64 bytes according to physical interface
capabilities and configuration.

* The ADDRESSES field contains either 1 or 2 addresses.
* Each address is 16 bytes long.
* The Header Type flag in the HEADER field determines
whether the ADDRESSES field contains 1 or 2 addresses.
* Addresses are SHA-256 hashes truncated to 16 bytes.

* The CONTEXT field is 1 byte.
* It is used by Reticulum to determine packet context.

* The DATA field is between 0 and 465 bytes.
* It contains the packets data payload.

IFAC Flag
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
open 0 Packet for publically accessible interface
authenticated 1 Interface authentication is included in packet


Header Types
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
type 1 0 Two byte header, one 16 byte address field
type 2 1 Two byte header, two 16 byte address fields


Propagation Types
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
broadcast 00
transport 01
reserved 10
reserved 11


Destination Types
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
single 00
group 01
plain 10
link 11


Packet Types
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
data 00
announce 01
link request 10
proof 11


+- Packet Example -+

HEADER FIELD DESTINATION FIELDS CONTEXT FIELD DATA FIELD
_______|_______ ________________|________________ ________|______ __|_
| | | | | | | |
01010000 00000100 [HASH1, 16 bytes] [HASH2, 16 bytes] [CONTEXT, 1 byte] [DATA]
|| | | | |
|| | | | +-- Hops = 4
|| | | +------- Packet Type = DATA
|| | +--------- Destination Type = SINGLE
|| +----------- Propagation Type = TRANSPORT
|+------------- Header Type = HEADER_2 (two byte header, two address fields)
+-------------- Access Codes = DISABLED


+- Packet Example -+

HEADER FIELD DESTINATION FIELD CONTEXT FIELD DATA FIELD
_______|_______ _______|_______ ________|______ __|_
| | | | | | | |
00000000 00000111 [HASH1, 16 bytes] [CONTEXT, 1 byte] [DATA]
|| | | | |
|| | | | +-- Hops = 7
|| | | +------- Packet Type = DATA
|| | +--------- Destination Type = SINGLE
|| +----------- Propagation Type = BROADCAST
|+------------- Header Type = HEADER_1 (two byte header, one address field)
+-------------- Access Codes = DISABLED


+- Packet Example -+

HEADER FIELD IFAC FIELD DESTINATION FIELD CONTEXT FIELD DATA FIELD
_______|_______ ______|______ _______|_______ ________|______ __|_
| | | | | | | | | |
10000000 00000111 [IFAC, N bytes] [HASH1, 16 bytes] [CONTEXT, 1 byte] [DATA]
|| | | | |
|| | | | +-- Hops = 7
|| | | +------- Packet Type = DATA
|| | +--------- Destination Type = SINGLE
|| +----------- Propagation Type = BROADCAST
|+------------- Header Type = HEADER_1 (two byte header, one address field)
+-------------- Access Codes = ENABLED


Size examples of different packet types
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

The following table lists example sizes of various
packet types. The size listed are the complete on-
wire size counting all fields including headers,
but excluding any interface access codes.

Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes Path Request : 51 bytes
Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes Announce : 167 bytes
Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes Link Request : 83 bytes
Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes Link Proof : 115 bytes
Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes Link RTT packet : 99 bytes
Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes Link keepalive : 20 bytes
*/


T8b949e// Reticulum Packet Structure
T8b949e//
T8b949e// 0 1 2 3
T8b949e// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// |I|H|PRT|DT |PT | hops | destination... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination | context | data ... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e//
T8b949e// 0 1 2 3
T8b949e// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// |I|H|PRT|DT |PT | hops | destination_1... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_1... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_1... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_1... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_1 | destination_2... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_2... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_2... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_2... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
T8b949e// | ...destination_2 | context | data ... |
T8b949e// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Tffa657void Te6edf3PacketTff7b72:Tff7b72:Te6edf3packTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::pack: packing packet...Ta5d6ff"Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3logic_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket destination is requiredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_hash Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4;

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_headerTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_encrypted Tff7b72= Tffa657falseTb4b4b4;

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flagsTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hopsTb4b4b4;

T8b949e// CBA LINK
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3LRPROOFTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4) Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffPacket is not associated with a LinkTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::pack: destination link id: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3link_idTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3link_idTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72=Tff7b72= Te6edf3HEADER_1Tb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::pack: destination hash: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72=Tff7b72= Te6edf3ANNOUNCETb4b4b4) Tb4b4b4{
T8b949e// Announce packets are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72=Tff7b72= Te6edf3LINKREQUESTTb4b4b4) Tb4b4b4{
T8b949e// Link request packets are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72=Tff7b72= Te6edf3PROOF Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3RESOURCE_PRFTb4b4b4) Tb4b4b4{
T8b949e// Resource proofs are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
T8b949e// CBA LINK
T8b949e//p elif self.packet_type == Packet.PROOF and self.destination.type == RNS.Destination.LINK:
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72=Tff7b72= Te6edf3PROOF Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINKTb4b4b4) Tb4b4b4{
T8b949e// Packet proofs over links are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3RESOURCETb4b4b4) Tb4b4b4{
T8b949e// A resource takes care of encryption
T8b949e// by itself
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3KEEPALIVETb4b4b4) Tb4b4b4{
T8b949e// Keepalive packets contain no actual
T8b949e// data
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3CACHE_REQUESTTb4b4b4) Tb4b4b4{
T8b949e// Cache-requests are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e// In all other cases, we encrypt the packet
T8b949e// with the destination's encryption method
T8b949e// CBA LINK
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3encryptTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ff***** Link data: %sTa5d6ff"Tb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertextTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3encryptTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4)Tb4b4b4;
Te6edf3TRACEFTb4b4b4(Ta5d6ff"Ta5d6ff***** Destination Data: %sTa5d6ff"Tb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertextTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3c_strTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// CBA RATCHET
T8b949e/*p TODO
if hasattr(self.destination, "latest_ratchet_id"):
self.ratchet_id = self.destination.latest_ratchet_id
*/
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_encrypted Tff7b72= Tffa657trueTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72=Tff7b72= Te6edf3HEADER_2Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffPacket with header type 2 must have a transport IDTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::pack: transport id: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::pack: destination hash: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_type Tff7b72=Tff7b72= Te6edf3ANNOUNCETb4b4b4) Tb4b4b4{
T8b949e// Announce packets are not encrypted
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertext Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4;
Tb4b4b4}
T8b949e// CBA No default encryption here like with header type HEADER_1 ???
T8b949e// CBA Is there any packet type besides ANNOUNCE with header type HEADER_2 ???
T8b949e// CBA Safe to assume that all HEADER_2 type packets are in transport and therefore can not and will not be decrypted locally ???
Tb4b4b4}
Tb4b4b4}

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72<Tff7b72< Tb4b4b4(Tffa657uint8_tTb4b4b4)Te6edf3_objectTff7b72-Tff7b72>Te6edf3_contextTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_raw Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_ciphertextTb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72> Te6edf3_objectTff7b72-Tff7b72>Te6edf3_MTUTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3length_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket size of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff exceeds MTU of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_MTUTb4b4b4) Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packed Tff7b72= Tffa657trueTb4b4b4;
Te6edf3update_hashTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3PacketTff7b72:Tff7b72:Te6edf3unpackTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::unpack: unpacking packet...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MINSIZETb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3length_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket size of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff does not meet minimum header size of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MINSIZETb4b4b4) Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Tffa657uint8_tTff7b72* Te6edf3raw Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// read header
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flags Tff7b72= Te6edf3rawTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hops Tff7b72= Te6edf3rawTb4b4b4[T79c0ff1Tb4b4b4]Tb4b4b4;

Te6edf3unpack_flagsTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flagsTb4b4b4)Tb4b4b4;

T8b949e// CBA TODO detect invalid flags and throw error
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Te6edf3logTb4b4b4(Ta5d6ff"Ta5d6ffReceived malformed packet, dropping it.Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72=Tff7b72= Te6edf3HEADER_2Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72< Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MAXSIZETb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3length_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket size of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Ta5d6ff does not meet minimum header size of Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MAXSIZETb4b4b4) Tff7b72+Ta5d6ff"Ta5d6ff bytesTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3rawTff7b72+T79c0ff2Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_hashTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3rawTff7b72+Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff2Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72= Tff7b72static_castTff7b72<Te6edf3context_typesTff7b72>Tb4b4b4(Te6edf3rawTb4b4b4[T79c0ff2Tff7b72*Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3rawTff7b72+T79c0ff2Tff7b72*Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff3Tb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tff7b72-Tb4b4b4(T79c0ff2Tff7b72*Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff3Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e// uknown at this point whether data is encrypted or not
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_encrypted Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4.Te6edf3clearTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_hashTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3rawTff7b72+T79c0ff2Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72= Tff7b72static_castTff7b72<Te6edf3context_typesTff7b72>Tb4b4b4(Te6edf3rawTb4b4b4[Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff2Tb4b4b4]Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3assignTb4b4b4(Te6edf3rawTff7b72+Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff3Tb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tff7b72-Tb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3DESTINATION_LENGTHTff7b72+T79c0ff3Tb4b4b4)Tb4b4b4)Tb4b4b4;
T8b949e// uknown at this point whether data is encrypted or not
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_encrypted Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packed Tff7b72= Tffa657falseTb4b4b4;
Te6edf3update_hashTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72catch Tb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3exceptionTff7b72& Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTb4b4b4(Ta5d6ff"Ta5d6ffReceived malformed packet, dropping it. The contained exception was: Ta5d6ff"Tb4b4b4) Tff7b72+ Te6edf3eTb4b4b4.Te6edf3whatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}

T8b949e/*
Sends the packet.

:returns: A :ref:`RNS.PacketReceipt<api-packetreceipt>` instance if *create_receipt* was set to *True* when the packet was instantiated, if not returns *None*. If the packet could not be sent *False* is returned.
*/
Te6edf3PacketReceipt Te6edf3PacketTff7b72:Tff7b72:Te6edf3sendTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::send: sending packet...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sentTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3logic_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket was already sentTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// CBA LINK
T8b949e//p if self.destination.type == RNS.Destination.LINK:
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINKTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4) Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffPacket is not associated with a LinkTa5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3statusTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3LinkTff7b72:Tff7b72:Te6edf3CLOSEDTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3runtime_errorTb4b4b4(Ta5d6ff"Ta5d6ffAttempt to transmit over a closed linkTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3last_outboundTb4b4b4(Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3increment_txTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_linkTb4b4b4.Te6edf3increment_txbytesTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packedTb4b4b4) Tb4b4b4{
Te6edf3packTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72if Tb4b4b4(Te6edf3TransportTff7b72:Tff7b72:Te6edf3outboundTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::send: successfully sent packet!!!Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e//p return self.receipt
Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receiptTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffNo interfaces could process the outbound packetTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sent Tff7b72= Tffa657falseTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receipt Tff7b72= Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4;
T8b949e//p return False
Tff7b72return Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e/*
Re-sends the packet.

:returns: A :ref:`RNS.PacketReceipt<api-packetreceipt>` instance if *create_receipt* was set to *True* when the packet was instantiated, if not returns *None*. If the packet could not be sent *False* is returned.
*/
Tffa657bool Te6edf3PacketTff7b72:Tff7b72:Te6edf3resendTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::resend: re-sending packet...Ta5d6ff"Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sentTb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3logic_errorTb4b4b4(Ta5d6ff"Ta5d6ffPacket was not sent yetTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
T8b949e// Re-pack the packet to obtain new ciphertext for
T8b949e// encrypted destinations
Te6edf3packTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3TransportTff7b72:Tff7b72:Te6edf3outboundTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::resend: successfully sent packet!!!Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e//z return self.receipt
T8b949e// MOCK
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffNo interfaces could process the outbound packetTa5d6ff"Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_sent Tff7b72= Tffa657falseTb4b4b4;
T8b949e//z self.receipt = None;
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}

Tffa657void Te6edf3PacketTff7b72:Tff7b72:Te6edf3proveTb4b4b4(Tff7b72const Te6edf3DestinationTff7b72& Te6edf3destination T8b949e/*= {Type::NONE}*/Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacket::prove: proving packet...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// CBA LINK
T8b949e// CBA TODO: Determine under which circumstances to use _destination and which to use _link since it's unclear from this logic
T8b949e//p if self.fromPacked and hasattr(self, "destination") and self.destination:
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_fromPacked Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4) Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3prvTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3proveTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4, Te6edf3destinationTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
T8b949e//p elif self.fromPacked and hasattr(self, "link") and self.link:
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_fromPacked Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_linkTb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_linkTb4b4b4.Te6edf3prove_packetTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffCould not prove packet associated with neither a destination nor a linkTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}


T8b949e// Generates a special destination that allows Reticulum
T8b949e// to direct the proof back to the proved packet's sender
Te6edf3ProofDestination Te6edf3PacketTff7b72:Tff7b72:Te6edf3generate_proof_destinationTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72return Te6edf3ProofDestinationTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3PacketTff7b72:Tff7b72:Te6edf3validate_proof_packetTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3proof_packetTb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receiptTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receiptTb4b4b4.Te6edf3validate_proof_packetTb4b4b4(Te6edf3proof_packetTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657bool Te6edf3PacketTff7b72:Tff7b72:Te6edf3validate_proofTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3proofTb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receiptTb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3_objectTff7b72-Tff7b72>Te6edf3_receiptTb4b4b4.Te6edf3validate_proofTb4b4b4(Te6edf3proofTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3PacketTff7b72:Tff7b72:Te6edf3update_hashTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_hash Tff7b72= Te6edf3get_hashTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3Bytes Te6edf3PacketTff7b72:Tff7b72:Te6edf3get_hashTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3Bytes Te6edf3hashable_part Tff7b72= Te6edf3get_hashable_partTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e// CBA MCU SHORTER HASH
Tff7b72return Te6edf3IdentityTff7b72:Tff7b72:Te6edf3full_hashTb4b4b4(Te6edf3hashable_partTb4b4b4)Tb4b4b4;
T8b949e//return Identity::truncated_hash(hashable_part);
Tb4b4b4}

Tff7b72const Te6edf3Bytes Te6edf3PacketTff7b72:Tff7b72:Te6edf3getTruncatedHashTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3Bytes Te6edf3hashable_part Tff7b72= Te6edf3get_hashable_partTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3IdentityTff7b72:Tff7b72:Te6edf3truncated_hashTb4b4b4(Te6edf3hashable_partTb4b4b4)Tb4b4b4;
Tb4b4b4}

Tff7b72const Te6edf3Bytes Te6edf3PacketTff7b72:Tff7b72:Te6edf3get_hashable_partTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3Bytes Te6edf3hashable_partTb4b4b4;
Te6edf3hashable_part Tff7b72<Tff7b72< Tb4b4b4(Tffa657uint8_tTb4b4b4)Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72& T79c0ff0b00001111Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72=Tff7b72= Te6edf3HEADER_2Tb4b4b4) Tb4b4b4{
T8b949e//p hashable_part += self.raw[(RNS.Identity.TRUNCATED_HASHLENGTH//8)+2:]
Te6edf3hashable_part Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3midTb4b4b4(Tb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3TRUNCATED_HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tff7b72+T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e//p hashable_part += self.raw[2:];
Te6edf3hashable_part Tff7b72<Tff7b72< Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3midTb4b4b4(T79c0ff2Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72return Te6edf3hashable_partTb4b4b4;
Tb4b4b4}


Tff7b72#Tff7b72ifndef NDEBUG
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3PacketTff7b72:Tff7b72:Te6edf3debugStringTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"Ta5d6ff"Tb4b4b4;
Tb4b4b4}
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packedTb4b4b4) Tb4b4b4{
T8b949e//unpack();
Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3str Tff7b72= Ta5d6ff"Ta5d6ffph=Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff ht=Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_typeTb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff tt=Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_typeTb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff dt=Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_typeTb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff pt=Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_typeTb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff hp=Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hopsTb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff ti=Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3str Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff dh=Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3strTb4b4b4;
Tb4b4b4}
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3PacketTff7b72:Tff7b72:Te6edf3dumpStringTb4b4b4(Tb4b4b4) Tff7b72const Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTb4b4b4) Tb4b4b4{
Tff7b72return Ta5d6ff"Ta5d6ff"Tb4b4b4;
Tb4b4b4}
T8b949e//if (_object->_packed) {
T8b949e// unpack();
T8b949e//}
Tffa657bool Te6edf3encrypted Tff7b72= Tffa657trueTb4b4b4;
Te6edf3stdTff7b72:Tff7b72:Te6edf3string Te6edf3dumpTb4b4b4;
Te6edf3dump Tff7b72= Ta5d6ff"Tffea00\nTa5d6ff------------------------------------------------------------------------------Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffhash: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffflags: Ta5d6ff" Tff7b72+ Te6edf3hexFromByteTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_flagsTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
T8b949e//dump += " header_type: " + std::to_string(_object->_header_type) + "\n";
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff header_type: Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_typeTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72HEADER_1Tb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffHEADER_1Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72HEADER_2Tb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffHEADER_2Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_typeTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
T8b949e//dump += " transport_type: " + std::to_string(_object->_transport_type) + "\n";
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff transport_type: Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_typeTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72TransportTff7b72:Tff7b72:Tff7b72BROADCASTTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffBROADCASTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72TransportTff7b72:Tff7b72:Tff7b72TRANSPORTTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTRANSPORTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72TransportTff7b72:Tff7b72:Tff7b72RELAYTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRELAYTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72TransportTff7b72:Tff7b72:Tff7b72TUNNELTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffTUNNELTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72TransportTff7b72:Tff7b72:Tff7b72NONETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffNONETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_typeTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
T8b949e//dump += " destination_type: " + std::to_string(_object->_destination_type) + "\n";
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff destination_type: Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_typeTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72DestinationTff7b72:Tff7b72:Tff7b72SINGLETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffSINGLETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72DestinationTff7b72:Tff7b72:Tff7b72GROUPTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffGROUPTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72DestinationTff7b72:Tff7b72:Tff7b72PLAINTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffPLAINTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72TypeTff7b72:Tff7b72:Tff7b72DestinationTff7b72:Tff7b72:Tff7b72LINKTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLINKTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_typeTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
T8b949e//dump += " packet_type: " + std::to_string(_object->_packet_type) + "\n";
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff packet_type: Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_typeTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72DATATb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffDATATffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72ANNOUNCETb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffANNOUNCETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LINKREQUESTTb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLINKREQUESTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72PROOFTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffPROOFTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_context Tff7b72=Tff7b72= Te6edf3RESOURCE_PRFTb4b4b4) Tb4b4b4{
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
T8b949e// CBA LINK
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination Tff7b72&Tff7b72& Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINKTb4b4b4) Tb4b4b4{
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_packet_typeTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffhops: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hopsTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6fftransport: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_transport_idTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffdestination: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination_hashTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
T8b949e//dump += "context: " + std::to_string(_object->_context) + "\n";
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffcontext: Ta5d6ff"Tb4b4b4;
Tff7b72switch Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_contextTb4b4b4) Tb4b4b4{
Tff7b72case Tff7b72CONTEXT_NONETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffCONTEXT_NONETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCETb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_ADVTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_ADVTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_REQTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_REQTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_HMUTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_HMUTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_PRFTb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_PRFTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_ICLTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_ICLTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESOURCE_RCLTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESOURCE_RCLTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72CACHE_REQUESTTb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffCACHE_REQUESTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72REQUESTTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffREQUESTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72RESPONSETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffRESPONSETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72PATH_RESPONSETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffPATH_RESPONSETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72COMMANDTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffCOMMANDTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72COMMAND_STATUSTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffCOMMAND_STATUSTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72CHANNELTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffCHANNELTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72KEEPALIVETb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffKEEPALIVETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LINKIDENTIFYTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLINKIDENTIFYTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LINKCLOSETb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLINKCLOSETffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LINKPROOFTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLINKPROOFTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LRRTTTb4b4b4:
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLRRTTTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72case Tff7b72LRPROOFTb4b4b4:
Te6edf3encrypted Tff7b72= Tffa657falseTb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffLRPROOFTffea00\nTa5d6ff"Tb4b4b4;
Tff7b72breakTb4b4b4;
Tff7b72defaultTff7b72:
Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_contextTb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffraw: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff length: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffdata: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff length: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_dataTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
T8b949e//if ((encrypted || _object->_encrypted) && _object->_raw.size() > 0) {
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Tffa657size_t Te6edf3header_len Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MINSIZETb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_header_type Tff7b72=Tff7b72= Te6edf3HEADER_2Tb4b4b4) Tb4b4b4{
Te6edf3header_len Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3HEADER_MAXSIZETb4b4b4;
Tb4b4b4}
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ffencrypted:Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff header: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3leftTb4b4b4(Te6edf3header_lenTb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff key: Ta5d6ff" Tff7b72+ Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3midTb4b4b4(Te6edf3header_lenTb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3KEYSIZETff7b72/T79c0ff8Tff7b72/T79c0ff2Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3Bytes Td2a8ffciphertextTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_rawTb4b4b4.Te6edf3midTb4b4b4(Te6edf3header_lenTff7b72+Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3KEYSIZETff7b72/T79c0ff8Tff7b72/T79c0ff2Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff ciphertext: Ta5d6ff" Tff7b72+ Te6edf3ciphertextTb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff length: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ciphertextTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff iv: Ta5d6ff" Tff7b72+ Te6edf3ciphertextTb4b4b4.Te6edf3leftTb4b4b4(T79c0ff16Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff sig: Ta5d6ff" Tff7b72+ Te6edf3ciphertextTb4b4b4.Te6edf3rightTb4b4b4(T79c0ff32Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3ciphertextTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72>Tff7b72= T79c0ff48Tb4b4b4) Tb4b4b4{
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff aes ciphertext: Ta5d6ff" Tff7b72+ Te6edf3ciphertextTb4b4b4.Te6edf3midTb4b4b4(T79c0ff16Tb4b4b4, Te6edf3ciphertextTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)T79c0ff-48Tb4b4b4)Tb4b4b4.Te6edf3toHexTb4b4b4(Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff length: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3to_stringTb4b4b4(Te6edf3ciphertextTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4)T79c0ff-48Tb4b4b4) Tff7b72+ Ta5d6ff"Tffea00\nTa5d6ff"Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Te6edf3dump Tff7b72+Tff7b72= Ta5d6ff"Ta5d6ff------------------------------------------------------------------------------Tffea00\nTa5d6ff"Tb4b4b4;
Tff7b72return Te6edf3dumpTb4b4b4;
Tb4b4b4}
Tff7b72#Tff7b72endif


Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3PacketReceiptTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3packetTb4b4b4) Tff7b72: Te6edf3_objectTb4b4b4(Tff7b72new Te6edf3ObjectTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{

Tff7b72if Tb4b4b4(Tff7b72!Te6edf3packetTb4b4b4.Te6edf3destinationTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffPacket with destination is requiredTa5d6ff"Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hash Tff7b72= Te6edf3packetTb4b4b4.Te6edf3get_hashTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_truncated_hash Tff7b72= Te6edf3packetTb4b4b4.Te6edf3getTruncatedHashTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destination Tff7b72= Te6edf3packetTb4b4b4.Te6edf3destinationTb4b4b4(Tb4b4b4)Tb4b4b4;

T8b949e// CBA LINK
Tff7b72if Tb4b4b4(Te6edf3packetTb4b4b4.Te6edf3destinationTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3typeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3TypeTff7b72:Tff7b72:Te6edf3DestinationTff7b72:Tff7b72:Te6edf3LINKTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3packetTb4b4b4.Te6edf3destination_linkTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72throw Te6edf3stdTff7b72:Tff7b72:Te6edf3invalid_argumentTb4b4b4(Ta5d6ff"Ta5d6ffPacket is not associated with a LinkTa5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e//p self.timeout = max(packet.destination.rtt * packet.destination.traffic_timeout_factor, RNS.Link.TRAFFIC_TIMEOUT_MIN_MS/1000)
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_timeout Tff7b72= Te6edf3stdTff7b72:Tff7b72:Te6edf3maxTb4b4b4(Te6edf3packetTb4b4b4.Te6edf3destination_linkTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3rttTb4b4b4(Tb4b4b4) Tff7b72* Te6edf3packetTb4b4b4.Te6edf3destination_linkTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3traffic_timeout_factorTb4b4b4(Tb4b4b4)Tb4b4b4, Tb4b4b4(Tffa657doubleTb4b4b4)Te6edf3RNSTff7b72:Tff7b72:Te6edf3TypeTff7b72:Tff7b72:Te6edf3LinkTff7b72:Tff7b72:Te6edf3TRAFFIC_TIMEOUT_MIN_MSTff7b72/T79c0ff1000Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
T8b949e//p self.timeout = RNS.Reticulum.get_instance().get_first_hop_timeout(self.destination.hash)
T8b949e//p self.timeout += Packet.TIMEOUT_PER_HOP * RNS.Transport.hops_to(self.destination.hash)
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_timeout Tff7b72= Te6edf3RNSTff7b72:Tff7b72:Te6edf3ReticulumTff7b72:Tff7b72:Te6edf3get_instanceTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3get_first_hop_timeoutTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_timeout Tff7b72+Tff7b72= Te6edf3TIMEOUT_PER_HOP Tff7b72* Te6edf3TransportTff7b72:Tff7b72:Te6edf3hops_toTb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3hashTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// Validate a proof packet
Tffa657bool Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3validate_proof_packetTb4b4b4(Tff7b72const Te6edf3PacketTff7b72& Te6edf3proof_packetTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3proof_packetTb4b4b4.Te6edf3linkTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3validate_link_proofTb4b4b4(Te6edf3proof_packetTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3proof_packetTb4b4b4.Te6edf3linkTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3proof_packetTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Te6edf3validate_proofTb4b4b4(Te6edf3proof_packetTb4b4b4.Te6edf3dataTb4b4b4(Tb4b4b4)Tb4b4b4, Te6edf3proof_packetTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}

T8b949e// Validate a raw proof for a link
T8b949e//bool PacketReceipt::validate_link_proof(const Bytes& proof, const Link& link, const Packet& proof_packet /*= {Type::NONE}*/) {
Tffa657bool Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3validate_link_proofTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3proofTb4b4b4, Tff7b72const Te6edf3LinkTff7b72& Te6edf3linkTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3validate_link_proofTb4b4b4(Te6edf3proofTb4b4b4, Te6edf3linkTb4b4b4, Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3validate_link_proofTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3proofTb4b4b4, Tff7b72const Te6edf3LinkTff7b72& Te6edf3linkTb4b4b4, Tff7b72const Te6edf3PacketTff7b72& Te6edf3proof_packetTb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacketReceipt::validate_link_proof: validating link proof...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// TODO: Hardcoded as explicit proofs for now
Tff7b72if Tb4b4b4(Tffa657true Tff7b72|Tff7b72| Te6edf3proofTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3EXPL_LENGTHTb4b4b4) Tb4b4b4{
T8b949e// This is an explicit proof
Te6edf3Bytes Te6edf3proof_hash Tff7b72= Te6edf3proofTb4b4b4.Te6edf3leftTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3Bytes Te6edf3signature Tff7b72= Te6edf3proofTb4b4b4.Te6edf3midTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3HASHLENGTHTff7b72/T79c0ff8Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3SIGLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3proof_hash Tff7b72=Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4) Tb4b4b4{
T8b949e//z if (link.validate(signature, _object->_hash)) {
Tff7b72if Tb4b4b4(Tffa657falseTb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72= Te6edf3DELIVEREDTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_proved Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_concluded_at Tff7b72= Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//z _object->_proof_packet = proof_packet;
T8b949e//z link.last_proof(_object->_concluded_at);

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72catch Tb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3exceptionTff7b72& Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffAn error occurred while evaluating external delivery callback for Ta5d6ff" Tff7b72+ Te6edf3linkTb4b4b4.Te6edf3toStringTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4;
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffThe contained exception was: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTb4b4b4(Te6edf3eTb4b4b4.Te6edf3whatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3proofTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3IMPL_LENGTHTb4b4b4) Tb4b4b4{
T8b949e// TODO: Why is this disabled?
T8b949e// signature = proof[:RNS.Identity.SIGLENGTH//8]
T8b949e// proof_valid = self.link.validate(signature, self.hash)
T8b949e// if proof_valid:
T8b949e// self.status = PacketReceipt.DELIVERED
T8b949e// self.proved = True
T8b949e// self.concluded_at = time.time()
T8b949e// if self.callbacks.delivery != None:
T8b949e// self.callbacks.delivery(self)
T8b949e// RNS.log("valid")
T8b949e// return True
T8b949e// else:
T8b949e// RNS.log("invalid")
T8b949e// return False
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

T8b949e// Validate a raw proof
T8b949e//bool PacketReceipt::validate_proof(const Bytes& proof, const Packet& proof_packet /*= {Type::NONE}*/) {
Tffa657bool Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3validate_proofTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3proofTb4b4b4) Tb4b4b4{
Tff7b72return Te6edf3validate_proofTb4b4b4(Te6edf3proofTb4b4b4, Tb4b4b4{Te6edf3TypeTff7b72:Tff7b72:Te6edf3NONETb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tffa657bool Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3validate_proofTb4b4b4(Tff7b72const Te6edf3BytesTff7b72& Te6edf3proofTb4b4b4, Tff7b72const Te6edf3PacketTff7b72& Te6edf3proof_packetTb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Te6edf3TRACETb4b4b4(Ta5d6ff"Ta5d6ffPacketReceipt::validate_proof: validating proof...Ta5d6ff"Tb4b4b4)Tb4b4b4;
T8b949e// CBA LINK
T8b949e// CBA TODO: Determine whether to use destination.identity or link.identity here!!!
Tff7b72if Tb4b4b4(Te6edf3proofTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3EXPL_LENGTHTb4b4b4) Tb4b4b4{
T8b949e// This is an explicit proof
Te6edf3Bytes Te6edf3proof_hash Tff7b72= Te6edf3proofTb4b4b4.Te6edf3leftTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3HASHLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Te6edf3Bytes Te6edf3signature Tff7b72= Te6edf3proofTb4b4b4.Te6edf3midTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3HASHLENGTHTff7b72/T79c0ff8Tb4b4b4, Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3SIGLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3proof_hash Tff7b72=Tff7b72= Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3validateTb4b4b4(Te6edf3signatureTb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72= Te6edf3DELIVEREDTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_proved Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_concluded_at Tff7b72= Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//z _object->_proof_packet = proof_packet;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72catch Tb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3exceptionTff7b72& Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffError while executing proof validated callback. The contained exception was: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTb4b4b4(Te6edf3eTb4b4b4.Te6edf3whatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tff7b72if Tb4b4b4(Te6edf3proofTb4b4b4.Te6edf3sizeTb4b4b4(Tb4b4b4) Tff7b72=Tff7b72= Te6edf3IMPL_LENGTHTb4b4b4) Tb4b4b4{
T8b949e// This is an implicit proof
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Te6edf3Bytes Te6edf3signature Tff7b72= Te6edf3proofTb4b4b4.Te6edf3leftTb4b4b4(Te6edf3TypeTff7b72:Tff7b72:Te6edf3IdentityTff7b72:Tff7b72:Te6edf3SIGLENGTHTff7b72/T79c0ff8Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_destinationTb4b4b4.Te6edf3identityTb4b4b4(Tb4b4b4)Tb4b4b4.Te6edf3validateTb4b4b4(Te6edf3signatureTb4b4b4, Te6edf3_objectTff7b72-Tff7b72>Te6edf3_hashTb4b4b4)Tb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72= Te6edf3DELIVEREDTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_proved Tff7b72= Tffa657trueTb4b4b4;
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_concluded_at Tff7b72= Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;
T8b949e//z _object->_proof_packet = proof_packet;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_deliveryTb4b4b4(Tff7b72*Tff7b72thisTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tff7b72catch Tb4b4b4(Te6edf3stdTff7b72:Tff7b72:Te6edf3exceptionTff7b72& Te6edf3eTb4b4b4) Tb4b4b4{
Te6edf3ERRORTb4b4b4(Ta5d6ff"Ta5d6ffError while executing proof validated callback. The contained exception was: Ta5d6ff" Tff7b72+ Te6edf3stdTff7b72:Tff7b72:Te6edf3stringTb4b4b4(Te6edf3eTb4b4b4.Te6edf3whatTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72return Tffa657trueTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72else Tb4b4b4{
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}
Tff7b72return Tffa657falseTb4b4b4;
Tb4b4b4}

Tffa657void Te6edf3PacketReceiptTff7b72:Tff7b72:Te6edf3check_timeoutTb4b4b4(Tb4b4b4) Tb4b4b4{
Te6edf3assertTb4b4b4(Te6edf3_objectTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72=Tff7b72= Te6edf3SENT Tff7b72&Tff7b72& Te6edf3is_timed_outTb4b4b4(Tb4b4b4)Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_timeout Tff7b72=Tff7b72= T79c0ff-1Tb4b4b4) Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72= Te6edf3CULLEDTb4b4b4;
Tb4b4b4}
Tff7b72else Tb4b4b4{
Te6edf3_objectTff7b72-Tff7b72>Te6edf3_status Tff7b72= Te6edf3FAILEDTb4b4b4;
Tb4b4b4}

Te6edf3_objectTff7b72-Tff7b72>Te6edf3_concluded_at Tff7b72= Te6edf3UtilitiesTff7b72:Tff7b72:Te6edf3OSTff7b72:Tff7b72:Te6edf3timeTb4b4b4(Tb4b4b4)Tb4b4b4;

Tff7b72if Tb4b4b4(Te6edf3_objectTff7b72-Tff7b72>Te6edf3_callbacksTb4b4b4.Te6edf3_timeoutTb4b4b4) Tb4b4b4{
T8b949e//z thread = threading.Thread(target=self.callbacks.timeout, args=(self,))
T8b949e//z thread.daemon = True
T8b949e//z thread.start();
Tb4b4b4}
Tb4b4b4}
Tb4b4b4}

T8b949e/*
void ArduinoJson::convertFromJson(JsonVariantConst src, RNS::Packet& dst) {
if (!src.isNull()) {
RNS::Bytes hash;
hash.assignHex(src.as<const char*>());
// Query transport for matching interface
dst = Transport::get_cached_packet(hash);
}
else {
dst = {RNS::Type::NONE};
}
}
*/

Served by rngit 1.4.2 - Generated in 0.09s